import { ElMessage } from 'element-plus'
import { GlobalMitt, Storage } from '@utils/methods'
import { baseURL } from '@/config'
import Axios from 'axios'

// 设置请求域名和超时时间
const axios = Axios.create({
    baseURL,
    timeout: 5000
})

/**
 * 请求拦截
 * */
axios.interceptors.request.use(
    config => {
        // 如果缓存有 token 则带上
        const token = Storage.get('token')
        token && (config.headers!.Authorization = `Bearer ${token}`)
        return config
    },
    err => Promise.reject(err)
)

/**
 * 响应拦截
 * */
axios.interceptors.response.use(
    // 返回响应数据
    response => {
        // 请求成功重置无网络页面
        GlobalMitt.emit('networkTimeout', false)
        return response.data
    },
    err => {
        // 报错响应
        if (err.response && err.response.data) {
            // 获取报错码和报错信息
            const { status: code, data: { message } } = err.response
            ElMessage.error(`Code: ${code}, Message: ${message}`)
        } else {
            // 无响应数据抛错
            if (err.message === 'timeout of 8000ms exceeded' || err.message === 'Network Error') {
                ElMessage.error('网络错误或请求超时，请重试！')
                // 网络超时显示页面
                GlobalMitt.emit('networkTimeout', true)
            }
        }
        return Promise.reject(err)
    }
)

export default axios
